import { getStartNode, addNode, addBranch, delNode, delBranchNode, addCondition, updateNode } from '@/utils/nodeUtil';
import {ElMessage} from "element-plus";
const serviceFlowStore = defineStore({
	// 这里的id必须为唯一ID
	id: 'serviceFlowStore',
	state: (): any => {
		return {
			//  节点数据
			node: getStartNode(),
			// 意见分支
			suggestBranchEnable: true,
			// 并行节点
			parallelBranchEnable: true,
			//编排规则id
			chainId:String,
			//编排接口编码
			funcCodeMap:[]
		};
	},
	// 等同于vuex的getter
	getters: {

	},
	// pinia 放弃了 mutations 只使用 actions
	actions: {

		//设置编排规则主键
		SET_CHAINID(chainId){
			this.chainId=chainId
		},

		ADD_FUNC(funcCode,funcTitle){
			//判断是否已存在该接口
			let flag=false;
			for(let i=0;i<this.funcCodeMap.length;i++){
				if(funcCode===this.funcCodeMap[i].dictKey){
					flag=true;
					break
				}
			}
			if(!flag){
				this.funcCodeMap.push({dictKey:funcCode,dictValue:funcTitle});
			}else{
				ElMessage.warning('该接口已存在请重新选择');
				return
			}
		},

		DEL_FUNC(funcCode){
			for(let i=0;i<this.funcCodeMap.length;i++){
				if(this.funcCodeMap[i].dictKey==funcCode){
					this.funcCodeMap.splice(i,1);
				}
			}
		},

		/**
		 *  初始节点
		 */
		SET_NODE(data) {
			if (data) {
				this.node = data;
			} else {
				this.node = getStartNode();
			}
		},
		/**
		 * 添加节点
		 */
		ADD_NODE(data) {
			if (data.nodeType == 0) {
				//  开始
				if (this.node.hasOwnProperty('id')) {
					// 如果添加的是并行节点
					if (data.addNode.type == 9) {
						data.addNode.childNode.childNode = this.node;
						data.addNode.childNode.childNode.pid = data.addNode.childNode.id;
					} else {
						data.addNode.childNode = this.node;
						data.addNode.childNode.pid = data.addNode.id;
					}
					data.addNode.pid = 0;
				}
				this.node = data.addNode;
			} else {
				if (data.id) {
					data.currNode.conditionNodes.forEach((conditionNode) => {
						if (conditionNode.id == data.id) {
							// 获取当前操作节点
							addNode(this.node, conditionNode, data.addNode);
						}
					});
				} else {
					// 获取当前操作节点
					addNode(this.node, data.currNode, data.addNode);
				}
			}
		},
		/**
		 * 添加分支
		 */
		ADD_BRANCH(node) {
			let len = node.conditionNodes.length;
			let conditionNode = node.conditionNodes[len - 1];
			conditionNode.attr.priorityLevel = len + 1 + '';
			if (conditionNode.type == 3) {
				// 分支
				node.conditionNodes.splice(len - 1, 0, addCondition(node, len));
			} else {
				// 并行
				node.conditionNodes.push(addCondition(node, len + 1));
			}
			addBranch(this.node, node);
		},
		/**
		 * 删除节点
		 */
		DEL_NODE(node) {
			if (node.id == this.node.id) {
				if (node.childNode) {
					this.node = node.childNode;
				} else {
					this.node = {};
				}
			} else if (node.type == 3 || node.type == 8 || node.type == 10) {
				// 条件(意见)分支节点和并行节点
				delBranchNode(this, this.node, node);
			} else {
				delNode(this.node, node);
			}
		},
		/**
		 * 更新节点
		 */
		UP_NODE({ currNode, field, value }) {
			if (currNode.id == this.node.id) {
				this.node[field] = value;
			} else {
				updateNode(this.node, currNode, field, value);
			}
		},
	},
});

export default serviceFlowStore;
